package LeetCode;

import java.util.ArrayList;
import java.util.List;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/5/12
 * \* Time: 17:19
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
public class Leet_59 {
    public static void main(String[] args) {
        int n = 3;
        int [][]arr = new int[n][n];
        arr = generateMatrix(n);
        for (int i =0;i<3;i++){
            for (int j =0;j<3;j++){
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }

    private static int[][] generateMatrix(int n) {
        int left = 0;
        int right = n - 1;
        int top = 0;
        int button = n -1;
        int ans = 1;
        int[][] res = new int[n][n];
        while (ans <= n*n && top <= button && left <= right){
            for(int i =0; i < right - left;i++){
                res[top][left + i] = ans++;
            }
            for(int i = 0; i <right - left;i++){
                res[top+i][right] = ans++;
            }
            for(int i = 0; i <right - left;i++){
                res[button][right - i] = ans++;
            }
            for (int i = 0 ; i<right-left;i++){
                res[button - i][left] = ans++;
            }
            if (button == top && left == right){
                res[top][left] = ans;
                return res;
            }
            top++;
            left++;
            button--;
            right--;
        }
        return res;
    }




//    public static int[][] generateMatrix(int n) {
//        int[][] res = new int[n][n];
//        // 循环次数
//        int loop = n / 2;
//        // 定义每次循环起始位置
//        int startX = 0;
//        int startY = 0;
//        // 定义偏移量
//        int offset = 1;
//        // 定义填充数字
//        int count = 1;
//        // 定义中间位置
//        int mid = n / 2;
//        while (loop > 0) {
//            int i = startX;
//            int j = startY;
//            // 模拟上侧从左到右
//            for (; j<startY + n -offset; ++j) {
//                res[startX][j] = count++;
//            }
//            // 模拟右侧从上到下
//            for (; i<startX + n -offset; ++i) {
//                res[i][j] = count++;
//            }
//            // 模拟下侧从右到左
//            for (; j > startY; j--) {
//                res[i][j] = count++;
//            }
//            // 模拟左侧从下到上
//            for (; i > startX; i--) {
//                res[i][j] = count++;
//            }
//            loop--;
//            startX += 1;
//            startY += 1;
//            offset += 2;
//        }
//        if (n % 2 == 1) {
//            res[mid][mid] = count;
//        }
//        return res;
//    }
}
